<script setup>
import { ref, onMounted } from 'vue';

import { ElMessage, ElMessageBox } from 'element-plus';

import { getDeptListApi, addDeptApi, getDeptByIdApi, updateDeptApi, deleteDeptApi } from '@/api/dept'

// 示例数据
const deptData = ref([]);

// 对话框标题
const formTitle = ref("");

// 模拟的编辑和删除方法
const update = async (id) => {
  console.log(`编辑部门：${id}`);
  // 1.显示对话框，对话框上方的标题是：编辑部门
  formVisible.value = true;
  formTitle.value = '编辑部门';
  // 2.回显部门数据
  const result = await getDeptByIdApi(id);
  console.log(result);
  
  formData.value = result.data;
  
 
};

const deleteById = (id) => {
  console.log(`删除部门：${id}`);
  //弹出一个消息弹窗
  ElMessageBox.confirm(
    '确定要删除这条记录吗?',
    '警告',
    {
      confirmButtonText: '确定',
      cancelButtonText: '取消',
      type: 'warning',
    }
  ).then(async () => {
    //删除部门数据
    const result = await deleteDeptApi(id);
    if (result.code) {
      // 删除成功
      ElMessage.success('删除成功')
    }
    // 重新查询一次
    search()
  }).catch(() => {
    //取消删除
    ElMessage.info('取消删除')
  })
};

// 定义一个函数，用来发送请求获取部门列表数据
const search = async () => {
  const result = await getDeptListApi()
  deptData.value = result.data
}

// 新增部门相关
// 表单状态
const formVisible = ref(false); // 控制表单是否可见
const formData = ref({
  id: null,
  name: '',
});

const rules = ref({
  name: [
    { required: true, message: '请输入部门名称', trigger: 'blur' },
    { min: 2, max: 10, message: '长度在 2 到 10 个字符', trigger: 'blur' },
  ],
});

// 新增部门打开表单对话框
const openFormDialog = () => {
  // 清空表单中的数据
  resetFormData();

  // 清空表单的校验
  if (deptFormRef.value) {
    deptFormRef.value.clearValidate();  // 重置表单验证状态
  }

  // 设置对话框的标题
  formTitle.value = '新增部门';
  
  formVisible.value = true;
};

// 关闭表单对话框
const closeFormDialog = () => {
  formVisible.value = false;
  resetFormData();
};

// 重置表单数据
const resetFormData = () => {
  formData.value.id = null;
  formData.value.name = '';
};
// 新增部门表单的引用
const deptFormRef = ref();
// 提交表单
const submitForm = async () => {
  deptFormRef.value.validate(async (valid) => {
    if (valid) {
      console.log(`接收到了数据：${formData.value.name}`);

      let result = ref(null);
      if (formData.value.id) {
        // 修改
        result = await updateDeptApi(formData.value);
      }else{
        //新增
        result = await addDeptApi(formData.value);
      }
      
      if (result.code === 1) {
        // 添加成功
        // 1.关闭对话框
        closeFormDialog();
        // 2.查询一次全部部门
        search();
        // 3.提示查询成功
        ElMessage({
          message: '保存成功',
          type: 'success',
        })
      } else {
        // 添加失败
        ElMessage({
          message: result.msg,
          type: 'error',
        })
        closeFormDialog();
      }
    }
  })
};

// 定义一个钩子函数
onMounted(() => {
  search()
})
</script>

<template>
  <div style="width: 100%">
    <h1>部门管理</h1>
    <br>
    <el-button type="primary" @click="openFormDialog">添加部门</el-button>
    <br> <br>

    <!-- 表格 -->
    <el-table :data="deptData" border style="width: 60%">
      <!-- 序号列 -->
      <el-table-column label="序号" width="120" align="center">
        <template #default="scope">
          {{ scope.$index + 1 }}
        </template>
      </el-table-column>

      <!-- 部门名称列 -->
      <el-table-column prop="name" label="部门名称" width="250" align="center" />

      <!-- 最后修改时间列 -->
      <el-table-column prop="updateTime" label="最后修改时间" width="300" align="center">
        <template #default="scope">
          {{ scope.row.updateTime }}
        </template>
      </el-table-column>

      <!-- 操作列 -->
      <el-table-column label="操作" fixed="right" align="center">
        <template #default="scope">
          <el-button type="primary" @click="update(scope.row.id)">编辑</el-button>
          <el-button type="danger" @click="deleteById(scope.row.id)">删除</el-button>
        </template>
      </el-table-column>
    </el-table>

    <!-- 表单对话框 -->
    <el-dialog v-model="formVisible" :title="formTitle" style="width: 500px;">
      <el-form :model="formData" :rules="rules" ref="deptFormRef" label-width="80px">
        <el-form-item label="部门名称" prop="name">
          <el-input v-model="formData.name" placeholder="请输入部门名称"></el-input>
        </el-form-item>
      </el-form>
      <template #footer>
        <span class="dialog-footer">
          <el-button @click="closeFormDialog">取 消</el-button>
          <el-button type="primary" @click="submitForm">确 定</el-button>
        </span>
      </template>
    </el-dialog>
  </div>
</template>

<style scoped></style>
